//公共方法
(function($){
    $.extend({
        /**
         * 添加标签
         * @param url  string  跳转页面的路径
         * @param text  string 标签文字
         * @param icon  string 标签图标
         */
        addTopTab: function(url,text,icon){
            var staticUrl = "/js/"
            layui.config({
                base:staticUrl
            }).use(['navtab','element'],function(){
                window.jQuery = window.$ = layui.jquery;
                window.layer = layui.layer;
                var element = top.window.layui.element(),
                    navtab = top.window.layui.navtab({
                        elem: '.larry-tab-box'
                    });
                var data = {
                    href: url,
                    icon: icon,
                    title: text,
                    id: url
                };
                navtab.tabAdd(data);
            })
        },
        /**
         * 卡片展示的伸缩
         * @param btnId string 触发的dom
         * @param cardId string 需要操作的dom
         */
        cardStretching: function (btnId, cardId) {
            var btn = $("#" + btnId),
                card = $("#" + cardId);
            if (card.is(":hidden")) {
                card.slideDown(200);
                btn.html(
                    '<i class="layui-icon">&#xe619;</i>'
                )
            } else {
                card.slideUp(200);
                btn.html(
                    '<i class="layui-icon">&#xe61a;</i>'
                )
            }
        },
        /**
         * 表格选中一条数据
         * @param tableId string 表格Id
         * @param row boolean true/false
         * @param field string 字段名
         * @return
         */
        getSelectedRow: function(tableId,row,field) {
            if(!tableId){
                tableId = 'jqGrid'
            }
            var grid = $("#"+tableId);
            var rowKey = grid.getGridParam("selrow");
            if(!rowKey){
                alert("请选择一条记录");
                return ;
            }

            var selectedIDs = grid.getGridParam("selarrrow");
            if(selectedIDs.length > 1){
                alert("只能选择一条记录");
                return ;
            }
            if(row){
                var rowData = $('#'+tableId).jqGrid('getRowData',selectedIDs[0]);
                if(field){
                    return rowData[field];
                }else{
                    return rowData
                }
            }else{
                return selectedIDs[0];
            }
        },
        /**
         * 表格选中多条数据
         * @param tableId string 表格Id 可传可不传，不传默认为 jqGrid
         * @return [ids] array
         */
        getSelectedRows: function(tableId) {
            if(!tableId){
                tableId = 'jqGrid'
            }
            var grid = $("#"+tableId);
            var rowKey = grid.getGridParam("selrow");
            if(!rowKey){
                alert("请选择一条记录");
                return ;
            }
            return grid.getGridParam("selarrrow");
        },
        /**
         * 公共提示方法
         * @param text 提示语句{string}
         * @param time 时间,如果没有的话默认为1500毫秒{number}
         * ljy_debug 现在是根据提示语句包含标志性文字进行类型的判断,无指定的字符无图片
         * 如果添加新的类型,请将图片转化为base64类型,这样可以确保多页面不同层级的提示图片均可使用
         */
        $prompt: function (text, time) {
            text = text || '';
            var icon;
            if (text.indexOf('成功') !== -1) {
                icon = ''
            } else if (text.indexOf('失败') !== -1 || text.indexOf('超时') !== -1 || text.indexOf('错误') !== -1) {
                icon = ''
            } else {
                icon = ''
            }
            $("body").mLoading({
                text: text,
                icon: icon
            });
            time = time || 1800;
            setTimeout(function () {
                $("body").mLoading("hide");
            }, time)
        },
        /**
         * 状态提示方法
         * @param text 自定义提示语句,默认为'正在加载中...'{string}
         * @constructor
         */
        $stateShow: function (text) {
            var prompt = text || '正在加载中...';
            $("body").mLoading({
                text: prompt
            });
        },
        /**
         * 状态隐藏 用于返回结果时调用
         * @constructor
         */
        $stateHide: function () {
            $("body").mLoading('hide');
        },
        /**
         * 刷新iframe,其实就是强制刷新
         */
        $refresh: function(ele){
            var ifm = ele.find('iframe');
            ifm.attr('src',ifm.attr('arc'))
        },

        /**
         * 表单重置
         * @param formEle string form表单的id
         * @returns {formReset}
         */
        formReset: function (formEle) {
            $(':input', '#' + formEle)
                .not(':button, :submit, :reset')
                // .not(':button, :submit, :reset, :hidden')
                .val('')
                .removeAttr('checked')
                .removeAttr('selected');
            return this;
        },

        /**
         * 打开模态框，并且渲染树
         * @param modalId 要打开的模态框的id
         * @param treeId 需要渲染的树的ID
         * @param treeData 菜单数据
         * @param clickFunction 点击节点的回调函数
         * return 无
         * */
        showZtreeModal:function(modalId,treeId,treeData,clickFunction){
            var tree = {};
            tree.data = data;
            tree.setting = {
                callback: {
                    onClick : function(event, treeId, treeNode){
                        var childs = treeNode.children;
                        if(!childs){

                            clickFunction(treeNode)
                            //可以获取到页面的内容，进而可以根据不同的内容，发送不同的请求，获取不同的数据
                        }else{

                        }
                    }
                }
            };
            $.fn.zTree.init($("#"+treeId), tree.setting, tree.data);
            $("#" + modalId).modal("show")
        },
        /**
         * 树形菜单关键字搜索
         * @param inputId 输入框ID
         * @param treeId 树的ID
         * return 无
         */
        ztreeQuery:function(inputId,treeId){
            var keyWord = $('#' + inputId).val();
            var zTreeObj = $.fn.zTree.getZTreeObj(treeId);
            var allNode = zTreeObj.transformToArray(zTreeObj.getNodes());
            allNode.splice(0,1);
            if(keyWord == ''){
                zTreeObj.showNodes(allNode);
                zTreeObj.expandAll(false);
            }else{
                zTreeObj.hideNodes(allNode);//隐藏所有节点
                hiddenNodes = zTreeObj.getNodesByParamFuzzy("name", keyWord, null);//搜索含有value关键字的节点
                hiddenNodes = zTreeObj.transformToArray(hiddenNodes);//转化为数组
                for(var n in hiddenNodes){//遍历
                    findParent(zTreeObj,hiddenNodes[n]);//找到其父节点
                }
                if(hiddenNodes.length === 0){
                    zTreeObj.showNodes(allNode)
                    zTreeObj.expandAll(false);
                }else{
                    zTreeObj.showNodes(hiddenNodes);//显示满足的所有节点
                    zTreeObj.expandAll(hiddenNodes,true,true,true); //展开满足的所有节点
                }
            }

            function findParent(treeObj,node){
                treeObj.expandNode(node,true,true,true);//展开treeObj中所有节点并获得焦点
                var pNode = node.getParentNode();//获取父节点
                if(pNode != null){
                    hiddenNodes.push(pNode);
                    findParent(treeObj,pNode);//递归查询上上一级父节点
                }
            };
        },
        /**
         * 监听子页面高度变化，改变iframe高度
         * chileId 子页面id
         * iframeId 父级iframe id
         */
        watchIframe:function(childId,iframeId){
            $('#'+childId).bind('resize',function(){
                window.parent.document.getElementById(iframeId).height = document.documentElement.scrollHeight;
            });
        },
        /**
         * 判断数组是否含有元素
         * @param arr 被查找的数组
         * @param value 查找的元素
         * @returns true 含有 false 不含有
         */
        isInArray:function(arr,value){
            for(var i = 0; i < arr.length; i++){
                if(value === arr[i]){
                    return true;
                }
            }
            return false;
        }
    });
    var main = {
        suspend:false,
        hiddenNodes:[],
        init:function(){
            this.fullScreen()

                .watchHeight()
                .bindResize()

                .contentScrollX()
                .rightMenu();
        },

        /**
         *提示窗口全屏
         */
        fullScreen:function(){
            $(".full-screen-open").click(function(){
                $('.ly-mian').append('<div class="cd-fullscreen-container">' +
                    '<iframe style="width:100%;height: 100%;" frameborder="no"  border="0" src=""></iframe>' +
                    '</div>');
                $('.cd-fullscreen-container').show()
            });
            return this;
        },


        /**
         *页面中的左右结构 ,监听右侧高度变化，左侧保持一致
         *
         */
        watchHeight:function(){
            var isHasLeftRight = $('.cd-aside-menu').length === 0 ? false : true;
            if(isHasLeftRight){
                $(".cd-aside-content").bind('resize',function(){
                    var _height = $('.cd-aside-content').height();
                    $('.cd-aside-menu').css('height',_height + 'px');
                });
            }
            return this;
        },
        /**
         * 鼠标拖拽改变宽度
         *
         */
        bindResize:function() {
            var el = document.getElementById('cd-aside-menu');
            var elMouse = document.getElementById('cd-aside-cusour');
            if(el){
                //初始化参数
                var els = el.style, x = 0;
                $(elMouse).mousedown(function(e) {
                    x = e.clientX - el.offsetWidth
                    el.setCapture ? (
                        //捕捉焦点
                        el.setCapture(),
                            //设置事件
                            el.onmousemove = function(ev) {
                                mouseMove(ev || event)
                            },
                            el.onmouseup = mouseUp
                    ) : (
                        //绑定事件
                        $(document).bind("mousemove", mouseMove).bind("mouseup", mouseUp)
                    )
                    e.preventDefault()
                });

                //移动事件
                function mouseMove(e) {
                    //宇宙超级无敌运算中...
                    var _width = e.clientX - x;
                    if(_width < 100){
                        _width = 100;
                    }
                    if(_width > 340){
                        _width = 340;
                    }
                    els.width = _width + 'px';
                }

                //停止事件
                function mouseUp() {
                    //在支持 releaseCapture 做些东东
                    el.releaseCapture ? (
                        //释放焦点
                        el.releaseCapture(),
                            //移除事件
                            el.onmousemove = el.onmouseup = null
                    ) : (
                        //卸载事件
                        $(document).unbind("mousemove", mouseMove).unbind("mouseup", mouseUp)
                    )
                }
            }

            return this;
        },

        /**
         * 内容区域滚动
         *
         */
        contentScrollX:function(){
            var content = $('body').find('.cd-container');
            if(content.length !== 0){
                $('body').css('overflow-x','auto');
            }
            return this;
        },
        /**
         *
         *
         */
        rightMenu:function(){
            document.onclick = function(e) {
                var e = e ? e : window.event;
                var tar = e.srcElement || e.target;
                if (tar.id != "rightMenu") {
                    // $("#顶级框架的id",top.window.document)
                    if ($("#rightMenu",top.window.document).is(":visible")) {
                        $("#rightMenu",top.window.document).css("display", "none")
                    }
                }
            }
        }
    };
    main.init();

})(jQuery);
